package com.ruoyi.system.service.impl

import com.ruoyi.common.core.domain.model.LoginUser
import com.ruoyi.common.utils.MyStringUtils
import com.ruoyi.system.domain.SysUserOnline
import com.ruoyi.system.service.ISysUserOnlineService
import org.springframework.stereotype.Service

/**
 * 在线用户 服务层处理
 *
 * @author ruoyi
 */
@Service
open class SysUserOnlineServiceImpl : ISysUserOnlineService {
    /**
     * 通过登录地址查询信息
     *
     * @param ipaddr 登录地址
     * @param user 用户信息
     * @return 在线用户信息
     */
    override fun selectOnlineByIpaddr(ipaddr: String?, user: LoginUser): SysUserOnline? {
        return if (ipaddr==user.ipaddr) {
            loginUserToUserOnline(user)
        } else null
    }

    /**
     * 通过用户名称查询信息
     *
     * @param userName 用户名称
     * @param user 用户信息
     * @return 在线用户信息
     */
    override fun selectOnlineByUserName(userName: String?, user: LoginUser): SysUserOnline? {
        return if (userName== user.username) {
            loginUserToUserOnline(user)
        } else null
    }

    /**
     * 通过登录地址/用户名称查询信息
     *
     * @param ipaddr 登录地址
     * @param userName 用户名称
     * @param user 用户信息
     * @return 在线用户信息
     */
    override fun selectOnlineByInfo(ipaddr: String?, userName: String?, user: LoginUser): SysUserOnline? {
        return if (ipaddr==user.ipaddr && userName== user.username) {
            loginUserToUserOnline(user)
        } else null
    }

    /**
     * 设置在线用户信息
     *
     * @param user 用户信息
     * @return 在线用户
     */
    override fun loginUserToUserOnline(user: LoginUser): SysUserOnline? {
        if (MyStringUtils.isNull(user) || MyStringUtils.isNull(user.user)) {
            return null
        }
        val sysUserOnline = SysUserOnline()
        sysUserOnline.tokenId = user.token
        sysUserOnline.userName = user.username
        sysUserOnline.ipaddr = user.ipaddr
        sysUserOnline.loginLocation = user.loginLocation
        sysUserOnline.browser = user.browser
        sysUserOnline.os = user.os
        sysUserOnline.loginTime = user.loginTime
        if (MyStringUtils.isNotNull(user.user?.dept)) {
            sysUserOnline.deptName = user.user?.dept?.deptName
        }
        return sysUserOnline
    }
}
